### 解题思路
执行用时：
4 ms
, 在所有 C++ 提交中击败了
87.61%
的用户
内存消耗：
9.3 MB
, 在所有 C++ 提交中击败了
57.26%
的用户

### 代码

```cpp
/*
date:20210330 pm12:30
key:除了比较的地方寻找中间元素不同，其他就是经典二分
*/
class Solution {
public:
    //第k个元素返回(m,n)
    int k_to_m(int k,vector<vector<int>>& matrix)
    {
        int nsize=matrix[0].size();
        int n=0;
        while(k>=nsize)
        {
           k-=nsize;
           n++;
        }

        return n;
    }
    int k_to_n(int k,vector<vector<int>>& matrix)
    {
        int nsize=matrix[0].size();
        int n=0;
        while(k>=nsize)
        {
           k-=nsize;
           n++;
        }

        return k;
    }
    //注意，其实不管什么样的形式，找到中间元素就行。因此l+r/2要转换为适当的x,y就能比较。
        bool erfenchazhao1(vector<vector<int>>& matrix,int L,int R,int key)
    {

        int x3=k_to_m((L+R)/2,matrix);
        int y3=k_to_n((L+R)/2,matrix);
         //cout<<matrix[x3][y3]<<" ";
        if(L>R)
        {
            return 0;
        }
        else
        {
            if(matrix[x3][y3]==key)
            {
                return 1;
            }
            else
            {
                 if(matrix[x3][y3]>key)
                 {
                     return erfenchazhao1(matrix,L,((L+R)/2)-1,key);
                 }
                else
                {
                    return erfenchazhao1(matrix,((L+R)/2)+1,R,key);
                }
                
            }
        }

    }
    bool searchMatrix(vector<vector<int>>& matrix, int target) 
    {

    int all_size=matrix[0].size()*matrix.size();
    all_size--;
    //这里是获得二维数组最后一个的小标，即R。
    return erfenchazhao1(matrix,0,all_size,target);
    }
};
```